///**
// * 上海中赢金融信息服务有限公司
// * Copyright (c) 2017-2027 Chinazyjr,Inc.All Rights Reserved.
// */
//package com.chinazyjr.framework.web.iterceptors;
//
//import java.lang.reflect.Method;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.springframework.stereotype.Component;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import com.sys.common.auth.manager.TokenLogic;
//import com.sys.common.auth.manager.TokenLogicImpl;
//import com.sys.common.auth.utils.AuthUtil;
//import com.sys.common.constants.AuthConstants;
//import com.sys.common.constants.CacheConstant;
//import com.sys.common.enums.APIStatusEnum;
//import com.sys.common.enums.auth.AuthCodeEnum;
//import com.sys.common.model.stdo.APIResult;
//import com.sys.common.model.vo.auth.TokenModel;
//import com.sys.common.model.vo.auth.login.UserInfo;
//import com.sys.common.utils.json.JsonUtil;
//import com.sys.common.utils.redis.RedisTokenManager;
//import com.sys.common.web.annontation.Auth;
//import com.sys.common.web.utils.WebUtil;
//import com.sys.midware.assist.utils.date.DateUtil;
//import com.sys.midware.logger.Logger;
//import com.sys.midware.logger.LoggerFactory;
//
// /**
// * <b>Description：</b> 登录注册拦截器 <br/>
// * <b>ClassName：</b> LoginInterceptor <br/>
// * <b>@author：</b> jackyshang <br/>
// * <b>@date：</b> 2016年8月5日 下午6:30:51 <br/>
// * <b>@version: </b>  <br/>
// */
//@Component
//public class AuthInterceptor extends HandlerInterceptorAdapter {
//
//	private Logger logger =LoggerFactory.getLogger(AuthInterceptor.class);
//	
//	@Override
//    public boolean preHandle(HttpServletRequest request,
//                             HttpServletResponse response, Object handler) throws Exception {
//    	APIResult result=new APIResult();
//    	String clientIp=WebUtil.getIpAddr(request);
//    	//1.验证用户是否频繁请求网站
//    	if(!AuthUtil.validateRequestTimes(clientIp)){
//    	    result=new APIResult(AuthCodeEnum.USER_FREQUENT_IP.getValue(),AuthCodeEnum.USER_FREQUENT_IP.getDesc());
//            logger.error(AuthCodeEnum.USER_FREQUENT_IP.getDesc()+"请求的ip："+clientIp+"请求时间："+DateUtil.getCurDateTimeStr19().toString());
//            response.getWriter().write(JsonUtil.toJson(result));
//
//    	}
//        //如果不是映射到方法直接通过
//        if (!(handler instanceof HandlerMethod)) {
//            return true;
//        }
//        HandlerMethod handlerMethod = (HandlerMethod) handler;
//        Method method = handlerMethod.getMethod();
//        if(method.getAnnotation(Auth.class)==null){
//        	return true;
//        }
//        //从header中得到accessToken,验证accessToken
//        String accessToken = request.getHeader(AuthConstants.REQ_KEY_ACCESS_TOKEN);
//////        //从header中得到refreshToken,验证refreshToken
////        String refreshToken=request.getHeader(AuthConstants.REQ_KEY_REFRESH_TOKEN);
//        //验证token
//        result = validateToken(accessToken);
//        
//        if(  APIStatusEnum.SUCCESS.getValue().equals(result.getStatus())){
//            return true;
//        }else{
//            response.getWriter().write(JsonUtil.toJson(result));
//            return false;
//        }
//        
//    }
//	/**
//	 * token验证
//	 * validateToken <br/> 
//	 * @param accessToken
//	 * @return  APIResult <br/>
//	 */
//	private APIResult validateToken(String accessToken){
//	    TokenLogic tokenLogic = TokenLogicImpl.getInstance();
//	    APIResult result=new APIResult();
//	    if(tokenLogic.validateAccessToken(accessToken)){//accesstoken验证通过
//	        UserInfo userInfo=  tokenLogic.getUserInfoByToken(accessToken);
//	        result.setData(userInfo);
//	    }else{
//	        result=new APIResult(AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getValue(),AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getDesc());
//	    }
//	    return result;
//	}
//	
//	/**     
//	 * 验证token是否有效 <br/> 
//	 * validateToken <br/> 
//	 * @param accessToken
//	 * @param refreshToken
//	 * @param result
//	 * @param method
//	 * @return  boolean <br/>   
//	 */
//	private APIResult validateToken(String token, String source,String clientIp,Method method,boolean flag) {
//		RedisTokenManager redisTokenManager=new RedisTokenManager();
//		//验证accessToken
//		//验证refreshToken
//		//验证不通过
//		APIResult result=new APIResult();
//		if(flag){
//			if(redisTokenManager.checkToken(token, true,true)){
//				return result;
//			}else{
//				result=new APIResult(AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getValue(),AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getDesc());
//				logger.error(AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getDesc()+",请求的ip："+clientIp+"请求时间："+DateUtil.getCurDateTimeStr19().toString());
//			}
//			return result;
//		}else{
//			if(redisTokenManager.checkToken(token, false,true)){
//				UserInfo userInfo=redisTokenManager.getUserInfoByToken(token);
//				logger.info("通过refreshToken生成新的accessToken和refreshToken,请求的ip："+clientIp+"请求时间："+DateUtil.getCurDateTimeStr19().toString());
//				//生成新的accessToken和refreshToken
//				TokenModel tokenModel=redisTokenManager.createToken(userInfo,source,clientIp,CacheConstant.P_AUTH_MEMBER_USER);
//				if(tokenModel==null){
//					result=new APIResult(AuthCodeEnum.USER_GET_TOKEN_ERROR.getValue(),AuthCodeEnum.USER_GET_TOKEN_ERROR.getDesc());
//					logger.error(AuthCodeEnum.USER_GET_TOKEN_ERROR.getDesc()+",请求的ip："+clientIp+"请求时间："+DateUtil.getCurDateTimeStr19().toString());
//				}else{
//					result=new APIResult(AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getValue(),AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getDesc());
//					logger.error(AuthCodeEnum.USER_ACCESS_TOKEN_ERROR.getDesc()+",请求的ip："+clientIp+"请求时间："+DateUtil.getCurDateTimeStr19().toString());
//				}
//				result.setData(tokenModel);
//			}else{
//				result=new APIResult(AuthCodeEnum.USER_REFRESH_TOKEN_ERROR.getValue(),AuthCodeEnum.USER_REFRESH_TOKEN_ERROR.getDesc());
//				logger.error(AuthCodeEnum.USER_REFRESH_TOKEN_ERROR.getDesc()+",请求的ip："+clientIp+"请求时间："+DateUtil.getCurDateTimeStr19().toString());
//			}
//		}
//		return result;
//	}
//	
//}
